#include <iostream>

using namespace std;

void fcn3();
void fcn4();

int main()
{
    fcn3();
    fcn4();
}

void fcn3()
{
    size_t v1 = 42; // 局部变量
    // f 可以改变它所捕获的变量的值
    auto f = [v1] () mutable { return ++v1; };
    v1 = 0;
    auto j = f(); // j 为 43
    cout << __func__ << " j: " << j << endl;
}

void fcn4()
{
    size_t v1 = 42; // 局部变量
    // v1 是一个非 const 变量的引用
    // 可以通过 f2 中的引用来改变它
    auto f2 = [&v1] { return ++v1; };
    v1 = 0;
    auto j = f2(); // j 为 1
    cout << __func__ << " j: " << j << endl;
}